인공지능 · 머신러닝 · 딥러닝
1.1 세 가지 개념의 관계
뉴스에서 매일 접하는 "AI", "머신러닝", "딥러닝"이라는 단어. 이 세 개념은 서로 독립적인 것이 아니라 러시아 인형 마트료시카처럼 포함 관계에 있습니다. 가장 큰 바깥쪽 인형이 인공지능(Artificial Intelligence)이고, 그 안에 머신러닝(Machine Learning)이 들어 있으며, 머신러닝 안에 딥러닝(Deep Learning)이 위치합니다.
1.2 인공지능(AI)이란?
인공지능은 인간의 학습, 추론, 지각, 판단 능력을 컴퓨터로 구현하려는 기술 전체를 아우르는 가장 넓은 개념입니다. 1956년 다트머스 회의에서 존 매카시가 처음 이 용어를 사용했습니다. 초기에는 규칙 기반 시스템(Rule-based System)으로 전문가의 지식을 직접 프로그래밍하는 방식이었습니다. "만약 체온이 38도 이상이면 열이 있다고 판단하라"처럼 사람이 모든 규칙을 일일이 작성해야 했기 때문에 복잡한 현실 문제에 한계가 있었습니다.
1.3 머신러닝(ML)이란?
머신러닝은 명시적으로 규칙을 프로그래밍하지 않고, 데이터로부터 스스로 패턴을 학습하는 기법입니다. 전통적인 프로그래밍이 "입력 + 규칙 → 결과"라면, 머신러닝은 "입력 + 결과 → 규칙"을 추출합니다. 의사결정 트리, 랜덤 포레스트, SVM, k-최근접 이웃 등 다양한 알고리즘이 있으며, 데이터의 특성(Feature)을 사람이 직접 설계해줘야 하는 경우가 많습니다. 예를 들어 고양이 사진을 분류하려면 "귀의 모양", "수염의 길이" 같은 특성을 사람이 정의해야 합니다.
1.4 딥러닝(DL)이란?
딥러닝은 머신러닝의 하위 분야로, 인공 신경망(Artificial Neural Network)을 여러 층으로 깊게(Deep) 쌓아 학습하는 기법입니다. 딥러닝의 가장 혁명적인 점은 특성을 자동으로 추출한다는 것입니다. 고양이 사진을 수만 장 보여주면, 신경망이 스스로 "귀 모양", "눈의 형태", "털의 패턴" 같은 특성을 발견합니다. 사람이 특성을 설계할 필요가 없어졌기 때문에, 이미지·음성·자연어 같은 비정형 데이터에서 압도적인 성능을 보입니다.
| 구분 | 전통적 프로그래밍 | 머신러닝 | 딥러닝 |
|---|---|---|---|
| 규칙 | 사람이 직접 작성 | 데이터에서 학습 | 데이터에서 학습 |
| 특성(Feature) | 사람이 정의 | 사람이 설계 | 자동 추출 |
| 데이터 양 | 불필요 | 중간 | 대량 필요 |
| 컴퓨팅 자원 | 적음 | 중간 | GPU/TPU 필요 |
| 비정형 데이터 | 매우 어려움 | 제한적 | 강력함 |
1.5 딥러닝이 주목받는 이유
딥러닝 이론 자체는 1980~90년대에 이미 존재했지만, 세 가지 조건이 갖춰지면서 2010년대 이후 폭발적으로 성장했습니다. 첫째는 빅데이터의 폭증입니다. 인터넷, 스마트폰, IoT 기기가 매일 생성하는 데이터가 학습 재료가 되었습니다. 둘째는 GPU(그래픽 처리 장치)의 발전입니다. 원래 게임용으로 설계된 GPU가 대규모 병렬 연산에 적합하여 신경망 학습 시간을 수십 배 단축시켰습니다. 셋째는 알고리즘의 혁신입니다. ReLU 활성화 함수, 드롭아웃, 배치 정규화, 어텐션 메커니즘 등의 기법이 학습을 안정적이고 효율적으로 만들었습니다.
생물학적 뉴런에서 인공 뉴런으로
2.1 뇌의 신경망 구조
인간의 뇌에는 약 860억 개의 뉴런(신경세포)이 있으며, 각 뉴런은 수천에서 수만 개의 다른 뉴런과 시냅스를 통해 연결되어 있습니다. 뉴런의 동작 원리는 놀라울 정도로 단순합니다. 수상돌기(Dendrite)를 통해 다른 뉴런으로부터 전기 신호를 받아들이고, 이 신호들의 합이 일정 임계값을 넘으면 축삭돌기(Axon)를 통해 다음 뉴런으로 신호를 전달합니다. 신호의 합이 임계값에 못 미치면 신호를 전달하지 않습니다.
2.2 인공 뉴런(Artificial Neuron)의 탄생
1943년 워런 매컬러(Warren McCulloch)와 월터 피츠(Walter Pitts)는 생물학적 뉴런의 원리를 수학적으로 모델링한 최초의 인공 뉴런을 제안했습니다. 인공 뉴런은 여러 입력값(x)에 각각의 가중치(w)를 곱한 후 모두 더하고, 편향(b)을 더한 뒤, 활성화 함수(f)를 통과시켜 출력값(y)을 생성합니다.
y = f(Σ wᵢxᵢ + b)
여기서 각 요소의 역할은 다음과 같습니다.
| 요소 | 생물학적 대응 | 역할 |
|---|---|---|
| 입력(x) | 수상돌기로 받는 신호 | 데이터 값 (이미지 픽셀, 텍스트 등) |
| 가중치(w) | 시냅스의 연결 강도 | 각 입력의 중요도. 학습을 통해 조정됨 |
| 편향(b) | 뉴런의 발화 임계값 | 활성화 기준점 조절 |
| 합산(Σ) | 세포체의 신호 합산 | 가중치 × 입력의 총합 |
| 활성화 함수(f) | 임계값 비교 & 발화 | 출력 여부와 크기를 결정 |
| 출력(y) | 축삭돌기의 출력 신호 | 다음 뉴런 또는 최종 결과 |
2.3 학습이란 "가중치를 찾는 과정"
딥러닝에서 "학습(Training)"이란 결국 최적의 가중치(w)와 편향(b) 값을 찾아가는 과정입니다. 처음에 가중치는 임의의 숫자로 초기화되며, 모델이 예측한 결과와 실제 정답의 차이(오차)를 줄이는 방향으로 가중치를 반복적으로 조정합니다. 이 과정을 수만~수억 번 반복하면 점차 정확한 예측을 하게 됩니다. 학생이 틀린 문제를 다시 풀면서 실력이 늘어가는 것과 비슷합니다.
퍼셉트론과 다층 신경망
3.1 퍼셉트론 (Perceptron)
1957년 프랭크 로젠블래트(Frank Rosenblatt)가 발명한 퍼셉트론은 가장 단순한 형태의 인공 신경망입니다. 입력층과 출력층만 있는 단층 구조로, 입력값에 가중치를 곱하여 합산한 뒤 임계값을 넘으면 1(참), 넘지 않으면 0(거짓)을 출력합니다. 퍼셉트론은 AND, OR 같은 간단한 논리 연산을 학습할 수 있었습니다.
그러나 1969년 마빈 민스키(Marvin Minsky)는 저서 "Perceptrons"에서 단층 퍼셉트론이 XOR(배타적 논리합) 문제를 풀 수 없다는 것을 수학적으로 증명했습니다. XOR은 두 입력이 다를 때만 참인 연산으로, 직선 하나로는 참과 거짓을 분리할 수 없는 비선형 문제입니다. 이 한계가 알려지면서 인공 신경망 연구는 1970~80년대 긴 겨울(AI Winter)을 겪게 됩니다.
| 문제 | x₁ | x₂ | 출력 | 단층 퍼셉트론 |
|---|---|---|---|---|
| AND | 0 | 0 | 0 | 해결 가능 ✓ |
| 0 | 1 | 0 | ||
| 1 | 0 | 0 | ||
| 1 | 1 | 1 | ||
| XOR | 0 | 0 | 0 | 해결 불가 ✗ |
| 0 | 1 | 1 | ||
| 1 | 0 | 1 | ||
| 1 | 1 | 0 |
3.2 다층 퍼셉트론 (MLP: Multi-Layer Perceptron)
XOR 문제의 해결책은 뉴런 층을 여러 개 쌓는 것이었습니다. 입력층(Input Layer)과 출력층(Output Layer) 사이에 은닉층(Hidden Layer)을 추가하면 비선형 문제를 풀 수 있습니다. 이것이 다층 퍼셉트론(MLP)이며, 현대 딥러닝의 기본 구조입니다.
3.3 "깊다(Deep)"의 의미
딥러닝에서 "딥(Deep)"은 은닉층이 2개 이상으로 깊게 쌓인 신경망을 의미합니다. 은닉층이 많을수록 더 복잡하고 추상적인 특징을 학습할 수 있습니다. 예를 들어 이미지를 인식하는 깊은 신경망에서 초기 층은 엣지(경계선)나 색상 같은 저수준 특징을, 중간 층은 눈·코·입 같은 부분적 형태를, 깊은 층은 "고양이 얼굴" 같은 고수준 개념을 학습합니다.
3.4 간단한 신경망 코드 맛보기
import torch
import torch.nn as nn
# 간단한 3층 신경망 정의
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.layer1 = nn.Linear(784, 256) # 입력 784 → 은닉 256
self.layer2 = nn.Linear(256, 128) # 은닉 256 → 은닉 128
self.layer3 = nn.Linear(128, 10) # 은닉 128 → 출력 10
self.relu = nn.ReLU()
def forward(self, x):
x = self.relu(self.layer1(x))
x = self.relu(self.layer2(x))
x = self.layer3(x)
return x
model = SimpleNet()
print(model)
활성화 함수의 세계
4.1 왜 활성화 함수가 필요한가?
만약 활성화 함수 없이 뉴런을 쌓으면 어떻게 될까요? 가중치를 곱하고 더하는 연산(선형 변환)을 아무리 많이 반복해도 결과는 여전히 선형 변환입니다. 즉 100층을 쌓아도 1층과 수학적으로 동일합니다. 활성화 함수는 신경망에 비선형성(Non-linearity)을 부여하여, 직선으로는 표현할 수 없는 복잡한 패턴을 학습할 수 있게 합니다.
4.2 주요 활성화 함수 비교
Sigmoid (시그모이드)
출력을 0과 1 사이로 압축합니다. "확률"처럼 해석할 수 있어 이진 분류의 출력층에 자주 사용됩니다. 하지만 입력값이 매우 크거나 작으면 기울기가 거의 0에 가까워지는 기울기 소실(Vanishing Gradient) 문제가 발생하여, 은닉층에서는 잘 사용하지 않습니다.
Tanh (하이퍼볼릭 탄젠트)
출력을 -1과 1 사이로 압축합니다. Sigmoid와 비슷하지만 출력의 중심이 0이어서 학습이 약간 더 안정적입니다. 그러나 역시 기울기 소실 문제가 존재합니다.
ReLU (Rectified Linear Unit)
현대 딥러닝에서 가장 많이 사용되는 활성화 함수입니다. 양수는 그대로 통과시키고, 음수는 0으로 만듭니다. 계산이 매우 간단하고 기울기 소실 문제를 크게 완화합니다. 다만 음수 입력에 대해 항상 0을 출력하는 죽은 뉴런(Dying ReLU) 문제가 가끔 발생합니다.
Leaky ReLU / PReLU
죽은 뉴런 문제를 해결하기 위해, 음수 영역에서도 작은 기울기(보통 0.01)를 부여합니다. PReLU(Parametric ReLU)는 이 기울기 값도 학습을 통해 자동으로 결정합니다.
Softmax (소프트맥스)
다중 클래스 분류의 출력층에 사용됩니다. 모든 출력값을 0~1 사이의 확률로 변환하며, 합이 1이 됩니다. "개 70%, 고양이 25%, 새 5%" 같은 확률 분포를 만들어냅니다.
4.3 활성화 함수 선택 가이드
| 위치 | 권장 활성화 함수 | 이유 |
|---|---|---|
| 은닉층 (일반) | ReLU | 빠르고 기울기 소실 완화 |
| 은닉층 (고급) | Leaky ReLU, GELU, SiLU | 죽은 뉴런 방지, Transformer에서 GELU 선호 |
| 출력층 - 이진 분류 | Sigmoid | 0~1 확률 출력 |
| 출력층 - 다중 분류 | Softmax | 클래스별 확률, 합=1 |
| 출력층 - 회귀 | 없음 (Linear) | 제한 없는 실수 출력 필요 |
손실 함수와 목표 설정
5.1 손실 함수란?
손실 함수(Loss Function)는 모델의 예측값과 실제 정답 사이의 차이(오차)를 수치로 나타내는 함수입니다. 딥러닝의 학습 목표는 이 손실 함수의 값을 최소화하는 것입니다. 시험 점수에 비유하면, 손실 함수는 "감점"과 같습니다. 감점이 적을수록 모델이 정답에 가까운 예측을 하고 있다는 의미입니다.
5.2 회귀 문제의 손실 함수
연속적인 숫자를 예측하는 회귀(Regression) 문제에서는 주로 다음 손실 함수를 사용합니다.
MSE (Mean Squared Error, 평균 제곱 오차)
예측값과 실제값 차이를 제곱하여 평균을 낸 것입니다. 제곱하기 때문에 큰 오차에 더 큰 패널티를 줍니다. 가장 널리 사용되는 회귀 손실 함수입니다.
MAE (Mean Absolute Error, 평균 절대 오차)
차이의 절대값을 평균낸 것입니다. MSE보다 이상치(Outlier)에 덜 민감합니다.
5.3 분류 문제의 손실 함수
Binary Cross-Entropy (이진 교차 엔트로피)
이진 분류(예: 스팸/정상 메일)에서 사용합니다. 모델이 정답에 가까운 확률을 출력할수록 손실이 작고, 정답과 정반대의 확률을 출력하면 손실이 매우 커집니다.
Categorical Cross-Entropy (범주형 교차 엔트로피)
다중 클래스 분류(예: 개/고양이/새/물고기)에서 사용합니다. 원-핫 인코딩된 정답 레이블과 Softmax 출력 사이의 교차 엔트로피를 계산합니다.
5.4 손실 함수 선택 가이드
| 문제 유형 | 손실 함수 | 출력층 활성화 | 예시 |
|---|---|---|---|
| 회귀 (연속값) | MSE / MAE | Linear (없음) | 집값 예측, 온도 예측 |
| 이진 분류 | Binary Cross-Entropy | Sigmoid | 스팸 탐지, 양/음성 판별 |
| 다중 클래스 분류 | Categorical Cross-Entropy | Softmax | 이미지 분류, 감정 분석 |
역전파와 경사하강법
6.1 역전파(Backpropagation)란?
역전파는 신경망의 출력에서 발생한 오차를 입력 방향으로 거슬러 올라가면서, 각 가중치가 오차에 얼마나 기여했는지 계산하는 알고리즘입니다. 1986년 데이비드 루멜하트, 제프리 힌턴, 로널드 윌리엄스가 발표한 논문을 통해 널리 알려졌습니다.
비유를 들어보겠습니다. 요리 대회에서 3명의 셰프(A, B, C)가 순서대로 요리에 참여합니다. A가 재료를 손질하고, B가 조리하고, C가 플레이팅합니다. 심사위원이 "짜다"라고 평가하면, 역전파는 "C의 소금 추가 때문인지, B의 양념 때문인지, A의 재료 선택 때문인지"를 역순으로 추적하여 각자의 책임 비율을 계산하는 과정입니다.
6.2 경사하강법(Gradient Descent)
역전파로 각 가중치의 기울기(Gradient)를 구했다면, 그 기울기의 반대 방향으로 가중치를 조금씩 조정합니다. 이것이 경사하강법입니다. 기울기란 "이 방향으로 가면 손실이 증가한다"는 신호이므로, 반대 방향으로 가면 손실이 줄어듭니다.
w_new = w_old - η × (∂L/∂w)
η (에타) = 학습률(Learning Rate) ∂L/∂w = 손실 L에 대한 가중치 w의 기울기
6.3 학습률(Learning Rate)의 중요성
학습률(η)은 한 번에 얼마나 크게 가중치를 조정할지 결정하는 하이퍼파라미터입니다. 이것은 딥러닝에서 가장 중요한 하이퍼파라미터 중 하나입니다.
| 학습률 크기 | 현상 | 비유 |
|---|---|---|
| 너무 큼 | 손실이 줄지 않고 발산 (오히려 증가) | 산에서 너무 큰 보폭으로 뛰어내려 반대편 산으로 넘어감 |
| 적절함 | 손실이 안정적으로 감소하여 최적점에 도달 | 산에서 적당한 보폭으로 골짜기에 도착 |
| 너무 작음 | 학습이 매우 느리고, 지역 최솟값에 갇힐 수 있음 | 아주 작은 걸음으로 내려가니 평생 걸려도 바닥에 도착 못함 |
6.4 경사하강법의 세 가지 변형
배치 경사하강법 (Batch GD)
전체 학습 데이터를 한 번에 사용하여 기울기를 계산합니다. 안정적이지만 데이터가 크면 매우 느리고 메모리를 많이 사용합니다.
확률적 경사하강법 (Stochastic GD, SGD)
데이터 1개씩 사용하여 기울기를 계산합니다. 빠르지만 진동이 심해 불안정합니다.
미니배치 경사하강법 (Mini-batch GD)
데이터를 작은 묶음(보통 32, 64, 128개)으로 나누어 사용합니다. 배치 GD와 SGD의 장점을 결합한 방식으로, 현재 가장 많이 사용되는 표준 방법입니다.
• Epoch : 전체 학습 데이터를 한 바퀴 다 도는 것. 보통 수십~수백 에폭을 반복합니다.
• Batch Size : 한 번에 처리하는 데이터 묶음의 크기. 32, 64, 128 등이 일반적입니다.
• Iteration : 1 에폭을 완료하기 위해 필요한 배치 처리 횟수. 데이터 10,000개, 배치 100이면 1 에폭 = 100 이터레이션.
옵티마이저 총정리
7.1 옵티마이저(Optimizer)란?
옵티마이저는 경사하강법을 발전시킨 알고리즘으로, 가중치를 어떤 전략으로 업데이트할지 결정합니다. 단순한 경사하강법은 학습률이 고정되어 있고, 모든 가중치에 같은 크기로 업데이트합니다. 고급 옵티마이저는 학습률을 자동으로 조절하거나, 이전 기울기 정보를 활용하여 더 빠르고 안정적으로 최적점을 찾습니다.
7.2 주요 옵티마이저 비교
SGD (Stochastic Gradient Descent)
가장 기본적인 옵티마이저입니다. 현재 기울기만을 사용하여 업데이트합니다. Momentum을 추가하면 이전 업데이트 방향의 관성을 반영하여 진동을 줄이고 수렴 속도를 높일 수 있습니다.
Adam (Adaptive Moment Estimation)
현재 가장 널리 사용되는 옵티마이저입니다. Momentum(기울기의 이동 평균)과 RMSprop(기울기 제곱의 이동 평균)을 결합했습니다. 각 가중치마다 학습률을 자동으로 조절하며, 대부분의 경우 좋은 성능을 보입니다. "무엇을 써야 할지 모르겠다면 Adam을 쓰라"는 조언이 있을 정도입니다.
AdamW
Adam에 가중치 감쇠(Weight Decay)를 올바르게 적용한 변형입니다. Transformer 기반 모델(BERT, GPT 등)에서 표준적으로 사용됩니다.
| 옵티마이저 | 핵심 아이디어 | 장점 | 단점 | 주요 사용처 |
|---|---|---|---|---|
| SGD | 현재 기울기로 업데이트 | 단순, 일반화 성능 좋음 | 느림, 튜닝 어려움 | CNN (ImageNet 학습) |
| SGD+Momentum | 관성 반영 | 진동 감소, 빠른 수렴 | 학습률 튜닝 필요 | 컴퓨터 비전 |
| RMSprop | 기울기 크기에 따라 학습률 자동 조절 | 적응적 학습률 | Adam보다 사용 줄어듦 | RNN 계열 |
| Adam | Momentum + RMSprop | 빠르고 안정적, 범용 | 일반화 성능이 SGD보다 낮을 수 있음 | 가장 많이 사용 |
| AdamW | Adam + 올바른 Weight Decay | Transformer에 최적 | 하이퍼파라미터 추가 | NLP, LLM |
과적합과 정규화
8.1 과적합(Overfitting)이란?
과적합은 모델이 학습 데이터의 패턴뿐만 아니라 노이즈와 특이점까지 외워버리는 현상입니다. 학습 데이터에 대한 정확도는 매우 높지만, 처음 보는 데이터(테스트 데이터)에 대한 성능은 크게 떨어집니다. 수학 시험에 비유하면, 기출 문제의 답을 통째로 외웠지만 새로운 문제를 풀지 못하는 상태입니다.
반대로 과소적합(Underfitting)은 모델이 학습 데이터의 패턴조차 충분히 학습하지 못한 상태입니다. 학습 데이터와 테스트 데이터 모두에서 성능이 낮습니다.
8.2 과적합을 방지하는 정규화 기법
드롭아웃 (Dropout)
학습할 때마다 무작위로 일부 뉴런(보통 20~50%)을 꺼버립니다. 매번 다른 네트워크 구조로 학습하는 효과가 있어, 특정 뉴런에 과도하게 의존하는 것을 방지합니다. 2014년 힌턴 교수 팀이 제안한 이 간단한 아이디어는 놀라울 정도로 효과적입니다. 예측(추론) 시에는 드롭아웃을 적용하지 않습니다.
배치 정규화 (Batch Normalization)
각 층의 출력을 평균 0, 분산 1로 정규화합니다. 학습을 안정시키고 수렴 속도를 크게 높이며, 과적합 방지에도 도움이 됩니다. 2015년 제안 이후 거의 모든 딥러닝 모델에 기본적으로 포함되는 핵심 기법이 되었습니다.
가중치 감쇠 (Weight Decay / L2 Regularization)
손실 함수에 가중치 크기의 제곱합을 패널티로 추가합니다. 가중치가 지나치게 커지는 것을 방지하여 모델을 단순하게 유지합니다.
조기 종료 (Early Stopping)
검증 데이터의 손실을 모니터링하다가, 더 이상 개선되지 않으면 학습을 멈춥니다. 가장 실용적이고 효과적인 과적합 방지 방법 중 하나입니다.
데이터 증강 (Data Augmentation)
이미지를 회전, 반전, 크롭, 색상 변환 등으로 변형하여 학습 데이터를 인위적으로 늘립니다. 모델이 다양한 변형을 경험하여 일반화 성능이 향상됩니다.
import torch.nn as nn
# 드롭아웃 + 배치정규화 적용 예시
model = nn.Sequential(
nn.Linear(784, 512),
nn.BatchNorm1d(512), # 배치 정규화
nn.ReLU(),
nn.Dropout(0.3), # 30% 드롭아웃
nn.Linear(512, 256),
nn.BatchNorm1d(256),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(256, 10) # 출력층 (드롭아웃 없음)
)
CNN - 합성곱 신경망
9.1 CNN은 왜 탄생했는가?
28×28 픽셀의 작은 흑백 이미지라도 784개의 입력 뉴런이 필요합니다. 224×224 컬러 이미지라면 150,528개입니다. 이것을 완전연결층(Dense Layer)으로 처리하면 매개변수가 폭발적으로 증가하여 학습이 거의 불가능합니다. 또한 완전연결층은 이미지의 공간적 구조(spatial structure)를 무시합니다. 픽셀 간의 인접 관계가 중요한 이미지에서 이는 치명적입니다.
합성곱 신경망(Convolutional Neural Network, CNN)은 인간의 시각 피질 구조에서 영감을 받아, 이미지의 지역적 패턴을 효율적으로 추출하는 구조입니다. 1989년 얀 르쿤(Yann LeCun)이 손글씨 숫자 인식을 위해 LeNet을 발표하면서 시작되었습니다.
9.2 CNN의 핵심 구성 요소
합성곱 층 (Convolutional Layer)
작은 필터(커널, 보통 3×3 또는 5×5)가 이미지 위를 슬라이딩하면서, 필터와 이미지의 겹치는 부분의 내적(element-wise multiplication + 합)을 계산합니다. 각 필터는 하나의 특정 패턴(수평 엣지, 수직 엣지, 색상 변화 등)을 감지합니다. 여러 개의 필터를 사용하여 다양한 패턴을 동시에 추출합니다. 핵심은 가중치 공유(Weight Sharing)입니다. 같은 필터가 이미지 전체를 순회하므로 매개변수가 극적으로 줄어듭니다.
풀링 층 (Pooling Layer)
특성맵의 공간적 크기를 줄여 계산량을 감소시키고, 위치 변화에 대한 불변성을 부여합니다. 가장 많이 사용되는 Max Pooling은 영역 내 최대값만 남깁니다. 예를 들어 2×2 Max Pooling은 특성맵 크기를 절반으로 줄입니다.
완전연결 층 (Fully Connected Layer)
합성곱·풀링 층에서 추출한 특성을 평탄화(Flatten)하여 1차원 벡터로 만든 후, 완전연결층에서 최종 분류를 수행합니다.
9.3 CNN이 학습하는 것
CNN의 각 층은 점점 더 추상적인 특징을 학습합니다.
| 층 깊이 | 학습하는 특징 | 비유 |
|---|---|---|
| 초기 층 (1~2층) | 엣지, 색상, 그래디언트 | 선, 점, 색의 변화 |
| 중간 층 (3~5층) | 텍스처, 패턴, 부분 형태 | 눈, 코, 바퀴, 창문 |
| 깊은 층 (6층 이상) | 객체, 장면, 의미 | "고양이 얼굴", "자동차", "풍경" |
9.4 유명한 CNN 아키텍처 변천사
| 모델 | 연도 | 층 수 | 핵심 혁신 |
|---|---|---|---|
| LeNet-5 | 1998 | 5 | CNN의 원조. 손글씨 인식 |
| AlexNet | 2012 | 8 | GPU 학습, ReLU, Dropout. 딥러닝 시대 개막 |
| VGGNet | 2014 | 16/19 | 3×3 필터만 사용한 단순하고 깊은 구조 |
| GoogLeNet | 2014 | 22 | Inception 모듈 (다양한 크기의 필터 병렬 사용) |
| ResNet | 2015 | 152 | 잔차 연결(Skip Connection)로 초깊은 학습 가능 |
| EfficientNet | 2019 | 가변 | 깊이·너비·해상도를 균형있게 스케일링 |
층을 깊게 쌓을수록 성능이 좋아지리라 기대하지만, 실제로는 일정 깊이 이상에서 오히려 성능이 떨어집니다(기울기 소실/폭발). ResNet은 입력을 출력에 직접 더하는 "잔차 연결"을 도입하여 이 문제를 해결했습니다. 이 아이디어는 이후 Transformer를 비롯한 거의 모든 딥러닝 아키텍처에 채택되었습니다.
RNN · LSTM · GRU — 시퀀스 데이터의 처리
10.1 시퀀스 데이터란?
텍스트, 음성, 주가, 날씨, 음악 등 순서가 중요한 데이터를 시퀀스 데이터라 합니다. "나는 학교에 간다"에서 단어의 순서를 바꾸면 의미가 완전히 달라집니다. 일반 신경망(MLP)은 입력의 순서를 고려하지 않기 때문에 시퀀스 데이터를 처리하기 어렵습니다.
10.2 RNN (Recurrent Neural Network)
순환 신경망(RNN)은 이전 시간 단계의 출력을 현재 입력과 함께 사용합니다. 즉, 기억(Memory)을 가집니다. "나는"을 처리한 결과가 "학교에"를 처리할 때 영향을 주고, 그 결과가 다시 "간다"를 처리할 때 영향을 줍니다. 마치 문장을 왼쪽에서 오른쪽으로 읽으면서 맥락을 기억하는 것과 같습니다.
10.3 RNN의 한계 — 장기 의존성 문제
RNN은 이론상 무한한 과거를 기억할 수 있지만, 실제로는 긴 시퀀스에서 초기 정보가 점점 사라집니다(기울기 소실). "어제 서울에서 출발해서... (50단어 후)... 그래서 나는 ___에 도착했다"에서 RNN은 "서울"이라는 정보를 50단어 뒤까지 기억하지 못합니다.
10.4 LSTM (Long Short-Term Memory)
1997년 호크라이터와 슈미트후버가 발명한 LSTM은 RNN의 장기 의존성 문제를 해결한 혁명적 구조입니다. 핵심은 셀 상태(Cell State)라는 정보 고속도로와 세 개의 게이트(Gate)입니다.
| 게이트 | 역할 | 비유 |
|---|---|---|
| 망각 게이트 (Forget Gate) | 과거 정보 중 버릴 것을 결정 | "이전 주제는 이제 중요하지 않다" |
| 입력 게이트 (Input Gate) | 새 정보 중 기억할 것을 결정 | "이 새 정보는 기억해두자" |
| 출력 게이트 (Output Gate) | 기억에서 현재 출력할 것을 결정 | "지금은 이 기억을 꺼내 쓰자" |
10.5 GRU (Gated Recurrent Unit)
2014년 조경현 교수가 제안한 GRU는 LSTM을 단순화한 버전입니다. 게이트를 두 개(리셋, 업데이트)로 줄이고 셀 상태를 제거하여 매개변수가 적고 학습이 빠릅니다. 성능은 LSTM과 대체로 비슷하여, 더 적은 데이터나 빠른 학습이 필요할 때 좋은 선택입니다.
Attention과 Transformer
11.1 어텐션 메커니즘의 탄생
RNN 기반 번역 모델에서 긴 문장을 번역할 때 성능이 크게 떨어지는 문제가 있었습니다. 입력 문장 전체를 하나의 고정된 벡터로 압축하면서 정보가 손실되기 때문입니다. 2014년 바다나우(Bahdanau)는 "디코더가 매 시점마다 입력 문장의 모든 단어를 직접 참조하게 하자"는 아이디어를 제안했습니다. 이것이 어텐션 메커니즘(Attention Mechanism)입니다.
번역할 때 "학교"라는 단어를 생성하려면 입력 문장에서 "school"에 더 많은 주의(Attention)를 기울이고, 다른 단어에는 적은 주의를 기울입니다. 어텐션은 이 "주의 분배"를 학습합니다.
11.2 Transformer — "Attention Is All You Need"
2017년 구글 연구팀은 논문 "Attention Is All You Need"에서 RNN을 완전히 제거하고 어텐션만으로 구성된 새로운 아키텍처 Transformer를 발표했습니다. 이것은 현대 AI 혁명의 가장 핵심적인 순간입니다.
Transformer의 핵심 혁신은 Self-Attention(자기 어텐션)입니다. 문장 내 모든 단어가 다른 모든 단어와의 관계를 동시에 파악합니다. "The cat sat on the mat because it was tired"에서 "it"이 무엇을 가리키는지 이해하려면 문장 내 모든 단어와의 관계를 봐야 합니다. Self-Attention은 이 과정을 한 번에 병렬로 처리합니다.
11.3 Self-Attention의 Q, K, V
Self-Attention은 세 가지 벡터로 작동합니다.
| 벡터 | 이름 | 역할 | 비유 |
|---|---|---|---|
| Q (Query) | 질문 | "나는 누구와 관련이 있지?" | 도서관에서 찾고 싶은 책의 키워드 |
| K (Key) | 열쇠 | "나는 이런 내용을 담고 있어" | 책의 제목/태그 |
| V (Value) | 값 | "나의 실제 정보는 이것이야" | 책의 실제 내용 |
각 단어는 Q, K, V 세 가지 버전의 벡터로 변환됩니다. Q와 K의 내적(dot product)으로 관련도 점수를 계산하고, Softmax로 정규화한 후, 이 가중치로 V를 합산합니다.
dₖ = Key 벡터의 차원 (스케일링 팩터)
11.4 Multi-Head Attention
하나의 어텐션 헤드만으로는 단어 간의 다양한 관계를 모두 포착하기 어렵습니다. 문법적 관계, 의미적 관계, 지시 관계 등이 동시에 존재하기 때문입니다. Transformer는 여러 개의 어텐션 헤드를 병렬로 실행하여 각 헤드가 서로 다른 관계에 집중하게 합니다. GPT-3의 경우 96개의 어텐션 헤드를 사용합니다.
11.5 Transformer의 구조
11.6 Transformer가 RNN을 대체한 이유
| 특성 | RNN/LSTM | Transformer |
|---|---|---|
| 병렬 처리 | 불가 (순차적) | 가능 (모든 위치 동시 처리) |
| 장기 의존성 | LSTM도 한계 있음 | Self-Attention으로 직접 연결 |
| 학습 속도 | 느림 | GPU 병렬화로 매우 빠름 |
| 확장성 | 제한적 | 매개변수를 늘릴수록 성능 향상 (스케일링 법칙) |
자연어 처리(NLP)와 대형 언어 모델(LLM)
12.1 NLP의 혁명적 변화
자연어 처리(Natural Language Processing)는 컴퓨터가 인간의 언어를 이해하고 생성하는 분야입니다. Transformer 등장 이전에는 단어를 원-핫 벡터로 표현하고 RNN으로 처리하는 것이 일반적이었습니다. 2013년 Word2Vec이 등장하면서 단어를 의미를 담은 밀집 벡터(Embedding)로 표현하는 혁신이 일어났고, 2017년 Transformer가 등장한 이후 NLP는 완전히 새로운 시대에 돌입했습니다.
12.2 BERT — 양방향 이해
2018년 구글이 발표한 BERT(Bidirectional Encoder Representations from Transformers)는 Transformer의 인코더 부분만 사용합니다. 핵심 아이디어는 마스크 언어 모델(MLM)입니다. 문장에서 일부 단어를 [MASK]로 가리고, 주변 문맥(양방향)을 보고 가려진 단어를 맞추는 방식으로 학습합니다. "나는 [MASK]에 간다"에서 양쪽 문맥을 모두 활용하여 빈칸을 예측합니다.
BERT는 대량의 텍스트로 사전 학습(Pre-training)한 뒤, 특정 작업(감정 분석, 질의응답 등)에 맞게 미세 조정(Fine-tuning)하는 "사전 학습 → 미세 조정" 패러다임을 확립했습니다. 이 접근법은 적은 데이터로도 높은 성능을 달성할 수 있어, NLP의 게임 체인저가 되었습니다.
12.3 GPT 시리즈 — 생성의 시대
OpenAI의 GPT(Generative Pre-trained Transformer)는 Transformer의 디코더 부분만 사용하는 자기 회귀(Autoregressive) 모델입니다. 이전 단어들을 보고 다음 단어를 예측하는 방식으로 학습합니다. "오늘 날씨가" 다음에 올 단어를 확률적으로 생성하고, 이를 반복하여 문장을 만들어냅니다.
| 모델 | 연도 | 매개변수 | 핵심 변화 |
|---|---|---|---|
| GPT-1 | 2018 | 1.17억 | Transformer 디코더 기반 생성 모델 |
| GPT-2 | 2019 | 15억 | 제로샷 학습 능력, 위험성 우려로 공개 지연 |
| GPT-3 | 2020 | 1,750억 | few-shot 학습, 대규모 스케일링 효과 입증 |
| GPT-4 | 2023 | 비공개 (추정 수조) | 멀티모달(텍스트+이미지), 추론 능력 대폭 향상 |
12.4 스케일링 법칙 (Scaling Law)
2020년 OpenAI는 놀라운 발견을 발표했습니다. 모델 크기, 데이터 양, 연산량을 늘리면 성능이 예측 가능한 멱법칙(Power Law)에 따라 향상된다는 것입니다. 이 "스케일링 법칙"은 "더 크게 만들면 더 좋아진다"는 단순한 원칙으로, 초거대 모델 경쟁의 이론적 근거가 되었습니다.
12.5 RLHF와 인스트럭션 튜닝
GPT-3는 놀라운 텍스트 생성 능력을 보였지만, 유해한 답변을 하거나 사용자의 의도를 정확히 파악하지 못하는 문제가 있었습니다. 이를 해결하기 위해 OpenAI는 RLHF(Reinforcement Learning from Human Feedback)를 도입했습니다. 인간 평가자가 모델의 여러 답변을 비교·평가하고, 이 피드백을 보상 신호로 활용하여 강화학습을 적용합니다. 이 기법이 ChatGPT의 핵심이며, "도움이 되고, 정직하고, 무해한" 답변을 하도록 모델을 정렬(Alignment)하는 과정입니다.
• 인코더 모델 (BERT 계열) : 문장 이해에 강함. 분류, 개체명 인식, 감정 분석 등에 적합.
• 디코더 모델 (GPT 계열) : 텍스트 생성에 강함. 문장 작성, 코드 생성, 대화 등에 적합.
• 인코더-디코더 모델 (T5, BART) : 입력을 이해하고 다른 형태로 출력. 번역, 요약 등에 적합.
생성형 AI — GAN · VAE · Diffusion Model
13.1 생성 모델이란?
지금까지 본 모델 대부분은 입력 데이터를 분류하거나 값을 예측하는 판별 모델(Discriminative Model)이었습니다. 반면 생성 모델(Generative Model)은 학습 데이터와 비슷한 새로운 데이터를 만들어냅니다. 존재하지 않는 사람의 얼굴 사진, 새로운 음악, 새로운 글 등을 생성합니다.
13.2 GAN (Generative Adversarial Network)
2014년 이안 굿펠로우(Ian Goodfellow)가 제안한 GAN은 두 신경망을 경쟁시키는 독창적인 구조입니다.
생성자(Generator)는 랜덤 노이즈에서 가짜 이미지를 만들고, 판별자(Discriminator)는 진짜 이미지와 가짜 이미지를 구별합니다. 생성자는 판별자를 속이려 하고, 판별자는 속지 않으려 합니다. 이 경쟁(적대적 학습)이 반복되면 생성자는 진짜와 구별할 수 없는 이미지를 만들게 됩니다. 위조범(생성자)과 감별사(판별자)의 대결에 비유할 수 있습니다.
GAN은 놀라운 이미지를 생성하지만, 학습이 매우 불안정하고(모드 붕괴), 원하는 이미지를 제어하기 어렵다는 단점이 있었습니다. StyleGAN은 고해상도 인물 생성, Pix2Pix는 이미지 변환, CycleGAN은 스타일 변환 등의 응용이 유명합니다.
13.3 VAE (Variational Autoencoder)
VAE는 데이터를 잠재 공간(Latent Space)의 확률 분포로 압축(인코딩)한 뒤, 이 분포에서 샘플링하여 새로운 데이터를 복원(디코딩)하는 생성 모델입니다. 인코더는 입력을 평균(μ)과 분산(σ²)으로 구성된 정규분포로 매핑하고, 디코더는 이 분포에서 뽑은 벡터로부터 원래 데이터를 재구성합니다.
GAN보다 학습이 안정적이고 잠재 공간이 연속적이어서 이미지 보간(interpolation)이 자연스럽습니다. 다만 GAN에 비해 생성 이미지가 흐릿한 경향이 있습니다.
13.4 Diffusion Model — 현재의 주인공
확산 모델(Diffusion Model)은 현재 이미지 생성 분야에서 가장 강력한 성능을 보이는 모델입니다. Stable Diffusion, DALL-E, Midjourney 등이 모두 확산 모델 기반입니다.
원리는 놀라울 정도로 직관적입니다. 순방향(Forward) 과정에서 깨끗한 이미지에 조금씩 노이즈(가우시안 노이즈)를 추가하여 결국 완전한 노이즈(백색 소음)로 만듭니다. 그리고 역방향(Reverse) 과정에서 신경망이 노이즈를 조금씩 제거하여 깨끗한 이미지로 복원하는 법을 학습합니다. 학습이 완료되면, 순수한 랜덤 노이즈에서 시작하여 점진적으로 노이즈를 제거해 이미지를 생성합니다.
13.5 생성 모델 비교
| 특성 | GAN | VAE | Diffusion |
|---|---|---|---|
| 생성 품질 | 매우 높음 | 중간 (약간 흐릿) | 최고 |
| 학습 안정성 | 불안정 (모드 붕괴) | 안정적 | 매우 안정적 |
| 다양성 | 모드 붕괴 위험 | 좋음 | 매우 좋음 |
| 생성 속도 | 매우 빠름 (1 패스) | 빠름 | 느림 (수십~수백 스텝) |
| 제어 가능성 | 어려움 | 잠재 공간 조작 | 텍스트 조건부 생성 강력 |
| 대표 모델 | StyleGAN | VQ-VAE | Stable Diffusion, DALL-E |
전이 학습과 파인튜닝
14.1 전이 학습(Transfer Learning)이란?
사람이 자전거를 탈 줄 알면 오토바이를 더 빠르게 배울 수 있습니다. 이미 학습한 지식을 새로운 문제에 전이(Transfer)하는 것입니다. 딥러닝에서도 동일한 원리가 적용됩니다. 대량의 데이터로 학습된 모델(사전 학습 모델)의 가중치를 가져와서, 적은 데이터의 새로운 작업에 활용하는 것을 전이 학습이라 합니다.
전이 학습이 중요한 이유는 현실적입니다. GPT-4 수준의 모델을 처음부터 학습하려면 수천 개의 GPU와 수백만 달러의 비용이 필요합니다. 대부분의 기업과 연구자는 이런 자원을 갖고 있지 않습니다. 전이 학습은 이미 학습된 지식을 재활용하여 적은 데이터와 비용으로 높은 성능을 달성할 수 있게 해줍니다.
14.2 파인튜닝(Fine-tuning) 방법
풀 파인튜닝 (Full Fine-tuning)
사전 학습된 모델의 모든 가중치를 새로운 작업의 데이터로 추가 학습합니다. 가장 많은 유연성을 제공하지만, 데이터가 적으면 과적합 위험이 있고 학습 비용이 높습니다.
특성 추출 (Feature Extraction)
사전 학습된 모델의 가중치를 동결(Freeze)하고, 마지막 분류 층만 새로 학습합니다. 빠르고 간편하지만 유연성이 제한됩니다.
PEFT (Parameter-Efficient Fine-Tuning)
전체 모델의 극히 일부(1~5%)만 추가로 학습하여 효율적으로 파인튜닝하는 최신 기법군입니다. 대표적으로 LoRA(Low-Rank Adaptation)가 있습니다. LoRA는 원래 가중치 행렬을 고정하고, 저랭크 분해된 작은 행렬만 학습합니다. 수조 개의 매개변수를 가진 LLM도 일반 GPU 하나로 파인튜닝할 수 있게 해주었습니다.
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from peft import LoraConfig, get_peft_model
# 사전 학습된 모델 로드
model = AutoModelForSequenceClassification.from_pretrained(
"bert-base-uncased", num_labels=2
)
# LoRA 설정: 전체 모델의 ~0.5%만 학습
lora_config = LoraConfig(
r=8, # 저랭크 차원
lora_alpha=32, # 스케일링 계수
target_modules=["query", "value"], # 어텐션 레이어
lora_dropout=0.1,
)
# LoRA 적용
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# 출력: trainable params: 294,912 | all params: 109,778,434 | 0.27%
• 데이터가 매우 적다 (수백 건) → 특성 추출 또는 LoRA
• 데이터가 중간 (수천~수만 건) → LoRA 또는 풀 파인튜닝
• 데이터가 풍부하고 원본 도메인과 매우 다르다 → 풀 파인튜닝
• LLM을 커스터마이징하고 싶다 → LoRA / QLoRA (양자화 + LoRA)
딥러닝 프레임워크
15.1 프레임워크란?
딥러닝 프레임워크는 신경망 설계, 학습, 평가를 위한 도구 모음입니다. 행렬 연산, 자동 미분(Autograd), GPU 가속 등 복잡한 구현을 추상화하여, 연구자와 개발자가 모델 설계에 집중할 수 있게 해줍니다.
15.2 주요 프레임워크 비교
| 프레임워크 | 개발 | 특징 | 주요 사용처 |
|---|---|---|---|
| PyTorch | Meta (Facebook) | 직관적인 Pythonic API, 동적 연산 그래프, 디버깅 용이 | 연구 분야 압도적 1위, 산업계에서도 급성장 |
| TensorFlow | 정적 그래프(2.0에서 동적 지원), 배포 생태계 강력 | 대규모 서비스 배포, 모바일(TFLite) | |
| JAX | NumPy 호환, JIT 컴파일, TPU 최적화 | Google DeepMind 연구, 대규모 학습 | |
| Keras | 고수준 API, 간결한 코드, 입문자 친화 | 프로토타이핑, 교육, 빠른 실험 |
15.3 PyTorch vs TensorFlow
2024년 기준 학계에서는 PyTorch가 압도적으로 많이 사용되며, 주요 AI 논문의 80% 이상이 PyTorch로 구현됩니다. TensorFlow는 대규모 배포 환경과 모바일 분야에서 강점이 있으나, 연구 분야에서의 점유율은 계속 감소하고 있습니다. 입문자라면 PyTorch로 시작하는 것을 권장합니다.
15.4 상위 라이브러리 생태계
| 라이브러리 | 역할 | 설명 |
|---|---|---|
| HuggingFace Transformers | 사전 학습 모델 허브 | 수만 개의 NLP/비전/음성 모델을 쉽게 로드·사용 |
| torchvision | 컴퓨터 비전 | 데이터셋, 모델, 이미지 변환 도구 모음 |
| Lightning (PyTorch Lightning) | 학습 코드 정리 | 보일러플레이트 코드 제거, 분산 학습 간편화 |
| Weights & Biases (wandb) | 실험 관리 | 학습 로그, 하이퍼파라미터 추적, 시각화 |
| ONNX | 모델 변환 | 프레임워크 간 모델 호환 포맷 |
import torch
import torch.nn as nn
import torch.optim as optim
# 모델, 손실 함수, 옵티마이저 정의
model = SimpleNet()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 학습 루프
for epoch in range(100):
for inputs, labels in train_loader:
# 1. 순전파
outputs = model(inputs)
loss = criterion(outputs, labels)
# 2. 역전파
optimizer.zero_grad() # 기울기 초기화
loss.backward() # 기울기 계산
optimizer.step() # 가중치 업데이트
print(f"Epoch {epoch+1}, Loss: {loss.item():.4f}")
데이터 전처리와 증강
16.1 "쓰레기를 넣으면 쓰레기가 나온다"
"Garbage In, Garbage Out"이라는 유명한 격언이 있습니다. 아무리 뛰어난 모델이라도 데이터의 품질이 나쁘면 좋은 결과를 낼 수 없습니다. 실무에서 딥러닝 엔지니어의 시간 중 60~80%는 데이터 수집, 정제, 전처리에 소요된다고 합니다. 데이터 전처리는 지루해 보이지만 모델 성능을 좌우하는 가장 중요한 단계입니다.
16.2 기본 전처리 기법
정규화 (Normalization)
입력 데이터의 범위를 일정하게 맞추는 작업입니다. 이미지의 픽셀값을 0~255에서 0~1로 스케일링하거나, 평균 0·표준편차 1로 표준화합니다. 정규화하지 않으면 큰 값을 가진 특성이 학습을 지배하여 수렴이 느려지거나 불안정해집니다.
원-핫 인코딩 (One-Hot Encoding)
범주형 데이터(예: "개", "고양이", "새")를 [1,0,0], [0,1,0], [0,0,1] 같은 이진 벡터로 변환합니다. 신경망은 숫자만 처리할 수 있기 때문입니다.
토큰화 (Tokenization)
자연어 텍스트를 의미 있는 단위(토큰)로 분할합니다. "딥러닝은 재밌다" → ["딥", "러닝", "은", "재밌", "다"]. 현대 LLM은 BPE(Byte Pair Encoding)나 SentencePiece 같은 서브워드 토크나이저를 사용합니다.
16.3 데이터 증강 (Data Augmentation)
데이터 증강은 기존 데이터를 변형하여 학습 데이터를 인위적으로 늘리는 기법입니다. 적은 데이터로도 모델의 일반화 성능을 크게 향상시킵니다.
| 분야 | 증강 기법 | 설명 |
|---|---|---|
| 이미지 | 수평/수직 반전 | 이미지 좌우/상하 뒤집기 |
| 회전 | 무작위 각도로 회전 | |
| 크롭 (Crop) | 이미지의 일부분만 잘라 사용 | |
| 색상 변형 | 밝기, 대비, 채도, 색조 무작위 변경 | |
| Cutout / Mixup | 이미지 일부를 가리거나 섞어 학습 | |
| 텍스트 | 동의어 치환 | 단어를 동의어로 교체 |
| 역번역 | 영어→한국어→영어로 번역하여 패러프레이즈 | |
| 무작위 삽입/삭제 | 단어를 무작위로 추가하거나 삭제 | |
| 음성 | 시간 확장/축소 | 재생 속도 변경 |
| 배경 소음 추가 | 다양한 환경 소음을 합성 |
from torchvision import transforms
# 학습용 데이터 증강 파이프라인
train_transform = transforms.Compose([
transforms.RandomResizedCrop(224), # 무작위 크롭 & 리사이즈
transforms.RandomHorizontalFlip(), # 50% 확률로 좌우 반전
transforms.RandomRotation(15), # ±15도 무작위 회전
transforms.ColorJitter( # 색상 무작위 변형
brightness=0.2, contrast=0.2,
saturation=0.2, hue=0.1
),
transforms.ToTensor(), # 텐서 변환 (0~1)
transforms.Normalize( # ImageNet 평균/표준편차
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
])
# 검증/테스트용 (증강 없이 정규화만)
val_transform = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
모델 학습 실전 파이프라인
17.1 전체 흐름 한눈에 보기
17.2 데이터 분할
모든 데이터를 학습에 사용하면 과적합을 감지할 수 없습니다. 데이터를 세 부분으로 나누는 것이 표준입니다.
| 구분 | 비율 | 용도 | 모델이 볼 수 있는 시점 |
|---|---|---|---|
| 학습 데이터 (Train) | 70~80% | 모델 가중치 학습 | 학습 중 매 배치마다 |
| 검증 데이터 (Validation) | 10~15% | 하이퍼파라미터 튜닝, 조기 종료 기준 | 학습 중 에폭 끝날 때마다 |
| 테스트 데이터 (Test) | 10~15% | 최종 성능 평가 (단 한 번만 사용) | 모든 학습과 튜닝 완료 후 |
17.3 주요 평가 지표
분류 문제
| 지표 | 설명 | 사용 상황 |
|---|---|---|
| 정확도 (Accuracy) | 전체 중 맞힌 비율 | 클래스 균형이 좋을 때 |
| 정밀도 (Precision) | "양성이라 예측한 것 중" 실제 양성 비율 | 오탐(False Positive)이 치명적일 때 (스팸 필터) |
| 재현율 (Recall) | "실제 양성 중" 찾아낸 비율 | 미탐(False Negative)이 치명적일 때 (암 진단) |
| F1 Score | Precision과 Recall의 조화 평균 | 정밀도와 재현율을 동시에 고려할 때 |
| AUC-ROC | 임계값에 무관한 분류 성능 | 전반적 분류 능력 평가 |
회귀 문제
회귀 문제에서는 MSE, RMSE(Root Mean Squared Error), MAE, R² 등을 사용합니다. RMSE는 MSE에 루트를 씌워 원래 단위로 해석할 수 있게 합니다. R²(결정 계수)는 0~1 사이의 값으로 모델이 데이터 변동의 얼마나 설명하는지를 나타냅니다.
17.4 하이퍼파라미터 튜닝
하이퍼파라미터는 사람이 직접 설정하는 값으로, 학습 과정에서 자동으로 결정되지 않습니다. 대표적으로 학습률, 배치 크기, 에폭 수, 층의 수, 뉴런 수, 드롭아웃 비율 등이 있습니다.
| 탐색 방법 | 원리 | 장단점 |
|---|---|---|
| 격자 탐색 (Grid Search) | 모든 조합을 시도 | 확실하지만 조합이 많으면 비현실적 |
| 랜덤 탐색 (Random Search) | 무작위로 조합 시도 | 격자 탐색보다 효율적, 실무에서 많이 사용 |
| 베이지안 최적화 (Optuna 등) | 이전 결과를 참고하여 다음 조합 결정 | 가장 효율적, 라이브러리 활용 권장 |
17.5 학습률 스케줄러 (Learning Rate Scheduler)
학습률을 고정하지 않고 학습 진행에 따라 동적으로 변경하는 기법입니다. 초반에는 큰 학습률로 빠르게 수렴하고, 후반에는 작은 학습률로 세밀하게 조정합니다.
| 스케줄러 | 설명 | 사용 상황 |
|---|---|---|
| StepLR | 일정 에폭마다 학습률을 일정 비율로 감소 | 가장 단순, 기본적 |
| CosineAnnealing | 코사인 곡선을 따라 부드럽게 감소 | CNN, Transformer 학습에 널리 사용 |
| ReduceLROnPlateau | 검증 손실이 개선되지 않으면 감소 | 적응적, 실전에서 안정적 |
| Warmup + Decay | 초반에 학습률을 서서히 올린 후 감소 | Transformer 학습의 표준 |
import torch.optim as optim
from torch.optim.lr_scheduler import CosineAnnealingLR
optimizer = optim.AdamW(model.parameters(), lr=1e-3)
scheduler = CosineAnnealingLR(optimizer, T_max=100, eta_min=1e-6)
for epoch in range(100):
train_one_epoch(model, train_loader, optimizer)
val_loss = evaluate(model, val_loader)
scheduler.step() # 에폭마다 학습률 갱신
print(f"Epoch {epoch+1}, LR: {scheduler.get_last_lr()[0]:.6f}")
딥러닝의 응용 분야
18.1 컴퓨터 비전 (Computer Vision)
딥러닝이 가장 먼저 인간 수준을 뛰어넘은 분야입니다. 이미지 분류(ResNet, EfficientNet), 객체 탐지(YOLO, DETR), 시맨틱 세그멘테이션(U-Net, SAM), 얼굴 인식, 자율주행, 의료 이미지 분석 등에 활용됩니다. 자율주행 자동차는 카메라로 촬영한 이미지에서 보행자, 차량, 신호등, 차선 등을 실시간으로 인식합니다. 의료 분야에서는 X-ray, CT, MRI 이미지에서 종양이나 병변을 전문의 수준으로 탐지합니다.
18.2 자연어 처리 (NLP)
기계 번역, 감정 분석, 텍스트 요약, 질의응답, 코드 생성, 대화형 AI 등 광범위한 영역을 다룹니다. ChatGPT, Claude 같은 대화형 AI는 인간과 자연스러운 대화가 가능하며, GitHub Copilot은 프로그래밍 코드를 자동으로 생성합니다. 기계 번역은 이제 많은 언어 쌍에서 사람 번역에 근접한 품질을 보입니다.
18.3 음성 인식 및 합성
Siri, Google Assistant, Alexa 등의 음성 비서는 딥러닝 기반 음성 인식(ASR)으로 구동됩니다. Whisper(OpenAI)는 다국어 음성 인식에서 놀라운 성능을 보입니다. 반대로 텍스트에서 자연스러운 음성을 생성하는 TTS(Text-to-Speech) 기술도 급격히 발전하여, 실제 사람과 구별하기 어려운 수준의 음성 합성이 가능합니다.
18.4 추천 시스템
넷플릭스, 유튜브, 스포티파이, 쿠팡 등에서 사용자의 취향을 분석하여 콘텐츠를 추천합니다. 딥러닝 기반 추천 시스템은 사용자의 행동 패턴, 아이템의 특성, 시간적 맥락 등 복잡한 요소를 종합적으로 고려합니다. Two-Tower 모델, Wide & Deep, DIN(Deep Interest Network) 등 다양한 아키텍처가 실무에서 사용됩니다.
18.5 과학 연구
AlphaFold(DeepMind)는 단백질의 3D 구조를 예측하여 생물학 분야에서 혁명적 변화를 가져왔습니다. 이 모델은 50년간 풀리지 않던 "단백질 접힘 문제"를 사실상 해결하여 2024년 노벨 화학상을 수상했습니다. 약물 설계, 기상 예측, 핵융합 플라즈마 제어, 수학 정리 증명 등 과학 전반에서 딥러닝이 새로운 돌파구를 열고 있습니다.
18.6 창작과 예술
Stable Diffusion, DALL-E, Midjourney는 텍스트 설명으로부터 고품질 이미지를 생성합니다. Suno, Udio 등은 텍스트에서 음악을 생성하고, Sora(OpenAI)는 텍스트에서 비디오를 생성합니다. 이러한 생성형 AI는 창작의 진입 장벽을 크게 낮추는 동시에, 저작권과 예술의 본질에 대한 새로운 논의를 촉발하고 있습니다.
18.7 응용 분야 종합 정리
| 분야 | 주요 작업 | 핵심 모델/기술 |
|---|---|---|
| 컴퓨터 비전 | 분류, 탐지, 세그멘테이션 | ResNet, YOLO, Vision Transformer, SAM |
| 자연어 처리 | 번역, 요약, 생성, 대화 | GPT, BERT, LLaMA, Claude, T5 |
| 음성 | 인식, 합성, 화자 분리 | Whisper, WaveNet, VALL-E |
| 이미지 생성 | 텍스트→이미지, 편집 | Stable Diffusion, DALL-E, Midjourney |
| 비디오 생성 | 텍스트→비디오 | Sora, Runway Gen, Kling |
| 로보틱스 | 로봇 제어, 조작 | 강화학습 + 모방학습, RT-2 |
| 과학 | 단백질 구조, 약물 설계 | AlphaFold, DiffDock, GNoME |
| 게임 | 게임 플레이, NPC AI | AlphaGo, AlphaStar, DreamerV3 |
| 자율주행 | 환경 인식, 경로 계획 | End-to-End 학습, BEV 인식 |
| 금융 | 이상 거래 탐지, 시계열 예측 | Transformer, GNN |
딥러닝의 윤리와 한계
19.1 편향(Bias)과 공정성
딥러닝 모델은 학습 데이터에 존재하는 편향을 그대로 학습하거나 증폭시킬 수 있습니다. 채용 AI가 과거의 편향된 채용 데이터로 학습하면 특정 성별이나 인종에 불리한 결정을 내릴 수 있습니다. 이미지 생성 모델이 특정 직업과 특정 성별·인종을 연결짓는 편향을 보이기도 합니다. AI 시스템을 개발할 때는 데이터의 편향을 인식하고, 공정성 지표를 모니터링하며, 다양한 그룹에 대한 성능을 균등하게 유지해야 합니다.
19.2 설명 가능성(Explainability)
딥러닝 모델은 종종 "블랙박스"로 불립니다. 수백만~수조 개의 매개변수가 어떻게 작동하여 특정 결정에 도달했는지 인간이 이해하기 어렵습니다. 의료 진단이나 법적 판결 같은 고위험 영역에서는 "왜 그런 결정을 내렸는가"를 설명할 수 있어야 합니다. Grad-CAM(이미지에서 모델이 주목한 영역 시각화), SHAP(각 특성의 기여도 분석), LIME(국소적 설명) 등의 설명 가능한 AI(XAI) 기법이 연구되고 있지만, 완전한 해결에는 아직 이르지 못했습니다.
19.3 딥페이크와 악용 위험
생성형 AI의 발전으로 사실적인 가짜 이미지, 비디오, 음성을 쉽게 만들 수 있게 되었습니다. 딥페이크 기술은 허위 정보 유포, 사기, 명예훼손 등에 악용될 수 있습니다. 특히 선거 기간의 가짜 영상이나 지인의 음성을 흉내 낸 보이스 피싱 등이 실제 피해를 발생시키고 있습니다. 이에 대응하여 워터마킹, AI 생성 콘텐츠 탐지, C2PA 같은 출처 인증 표준 등이 개발되고 있습니다.
19.4 환경 비용
대형 모델의 학습에는 막대한 에너지가 소비됩니다. GPT-3의 학습에는 약 1,287 MWh의 전력이 사용된 것으로 추정되며, 이는 미국 가정 약 120가구의 1년 전기 사용량에 해당합니다. GPT-4나 그 이후 모델의 학습 비용은 이보다 훨씬 큽니다. AI 산업의 탄소 발자국을 줄이기 위한 효율적인 모델 설계, 그린 에너지 사용, 모델 경량화(양자화, 지식 증류 등) 등이 중요해지고 있습니다.
19.5 프라이버시와 데이터 주권
딥러닝 모델은 방대한 데이터로 학습되며, 이 데이터에는 개인정보가 포함될 수 있습니다. 학습 데이터를 "기억"하여 개인정보를 노출하는 문제(Memorization), 동의 없이 수집된 데이터로 학습하는 문제, 생성 모델이 특정 개인의 얼굴이나 스타일을 재현하는 문제 등이 있습니다. GDPR(유럽), AI Act(유럽), 개인정보보호법(한국) 등 각국의 규제가 강화되고 있습니다.
19.6 현재의 기술적 한계
딥러닝의 놀라운 성능에도 불구하고 여전히 근본적인 한계가 있습니다.
| 한계 | 설명 | 현재 대응 |
|---|---|---|
| 환각 (Hallucination) | 사실이 아닌 정보를 자신 있게 생성 | RAG(검색 증강 생성), 사실 확인 시스템 |
| 인과 추론 부족 | 상관관계는 찾지만 인과관계를 이해하지 못함 | 인과 추론 모델 연구 중 |
| 상식 추론 한계 | 인간에게 당연한 물리적·사회적 상식 부족 | 월드 모델, 체화된 AI 연구 |
| 분포 외 일반화 | 학습 데이터와 다른 상황에서 예측 불가능한 실패 | 도메인 적응, 강건성 연구 |
| 에너지 효율 | 인간 뇌(20W)에 비해 수백만 배 비효율적 | 뉴로모픽 칩, 양자화, 경량 모델 |
학습 로드맵과 부록
20.1 딥러닝 학습 로드맵
| 단계 | 기간 | 학습 내용 | 이 튜토리얼 |
|---|---|---|---|
| Level 0 준비 | 2~4주 | Python, NumPy, 기초 수학(선형대수, 미적분, 확률통계) | 사전 지식 |
| Level 1 입문 | 4~6주 | 퍼셉트론, MLP, 활성화 함수, 손실 함수, 역전파, 경사하강법 | Ch.1 ~ Ch.8 |
| Level 2 핵심 | 6~8주 | CNN, RNN/LSTM, Transformer, 전이 학습, 프레임워크 숙달 | Ch.9 ~ Ch.15 |
| Level 3 실전 | 2~3개월 | 데이터 파이프라인, 학습 최적화, 평가 지표, 모델 배포 | Ch.16 ~ Ch.18 |
| Level 4 심화 | 3~6개월 | 생성 모델(GAN, Diffusion), LLM 파인튜닝, 강화학습, 분산 학습 | 추가 학습 |
| Level 5 전문 | 지속 | 최신 논문 구현, 오픈소스 기여, 자체 연구, 특정 도메인 전문화 | 지속 학습 |
20.2 필요한 수학 기초
딥러닝을 제대로 이해하기 위해 필요한 수학은 생각보다 범위가 한정적입니다. 다음 세 가지 분야의 기초만 다지면 대부분의 딥러닝 개념을 이해할 수 있습니다.
| 수학 분야 | 필요한 개념 | 딥러닝에서의 활용 |
|---|---|---|
| 선형대수 | 벡터, 행렬, 행렬 곱셈, 전치, 내적 | 신경망의 모든 연산이 행렬 곱셈 |
| 미적분 | 미분, 편미분, 연쇄 법칙(Chain Rule) | 역전파, 기울기 계산 |
| 확률·통계 | 확률 분포, 조건부 확률, 베이즈 정리, 기댓값 | 손실 함수, 생성 모델, 확률적 추론 |
20.3 추천 학습 자료
| 유형 | 자료명 | 특징 |
|---|---|---|
| 무료 강의 | 3Blue1Brown - Neural Networks | 시각적이고 직관적인 수학 설명, 최고의 입문 영상 |
| 무료 강의 | Andrej Karpathy - Zero to Hero | 밑바닥부터 GPT 구현, 설명력 최고 |
| 무료 강의 | Stanford CS231n (CNN) | 컴퓨터 비전 분야 최고의 강의 |
| 무료 강의 | Stanford CS224n (NLP) | 자연어 처리 분야 표준 강의 |
| 무료 강의 | MIT 6.S191 Introduction to DL | 매년 업데이트되는 최신 커리큘럼 |
| 무료 강의 | fast.ai Practical Deep Learning | 실습 중심, 탑다운 방식, 입문자 강추 |
| 도서 | 밑바닥부터 시작하는 딥러닝 (사이토 고키) | 프레임워크 없이 직접 구현, 원리 이해 최적 |
| 도서 | Dive into Deep Learning (d2l.ai) | 무료 온라인 교과서, PyTorch/TF 코드 포함 |
| 도서 | Deep Learning (Ian Goodfellow 외) | "꽃책", 이론 깊이가 뛰어난 교과서 |
| 실습 | Kaggle Competitions | 실전 데이터로 문제 해결 경험 축적 |
| 논문 | Papers With Code | 논문 + 코드 + 벤치마크 모음, 트렌드 파악 |
| 논문 | arXiv (arxiv.org) | 최신 논문 프리프린트 서버 |
20.4 핵심 용어 사전
| 용어 | 영문 | 설명 |
|---|---|---|
| 가중치 | Weight | 뉴런 간 연결의 강도. 학습의 핵심 대상 |
| 편향 | Bias | 활성화 함수의 기준점을 조절하는 상수 |
| 에폭 | Epoch | 전체 학습 데이터를 한 바퀴 도는 것 |
| 배치 | Batch | 한 번에 처리하는 데이터 묶음 |
| 학습률 | Learning Rate | 가중치 업데이트 크기를 조절하는 하이퍼파라미터 |
| 기울기 | Gradient | 손실 함수의 미분값. 가중치 업데이트 방향 결정 |
| 순전파 | Forward Pass | 입력 → 출력 방향으로 계산하는 과정 |
| 역전파 | Backpropagation | 출력 → 입력 방향으로 기울기를 전파하는 과정 |
| 과적합 | Overfitting | 학습 데이터에만 잘 맞고 새 데이터에 일반화되지 않는 상태 |
| 드롭아웃 | Dropout | 학습 시 무작위로 뉴런을 비활성화하는 정규화 기법 |
| 임베딩 | Embedding | 이산적 데이터(단어 등)를 연속적 벡터 공간으로 매핑 |
| 어텐션 | Attention | 입력의 각 부분에 다른 중요도를 부여하는 메커니즘 |
| 파인튜닝 | Fine-tuning | 사전 학습된 모델을 특정 작업에 맞게 추가 학습 |
| 잠재 공간 | Latent Space | 데이터의 핵심 특성이 압축된 저차원 표현 공간 |
| 환각 | Hallucination | AI가 사실이 아닌 정보를 자신 있게 생성하는 현상 |
| 토큰 | Token | 모델이 처리하는 텍스트의 기본 단위 (단어, 서브워드) |
| 추론 | Inference | 학습된 모델로 새 데이터에 대해 예측하는 과정 |
| 텐서 | Tensor | 다차원 배열. 딥러닝의 기본 데이터 구조 |
| 특성맵 | Feature Map | CNN에서 필터 적용 후 생성되는 출력 |
| 풀링 | Pooling | 특성맵의 크기를 줄이는 다운샘플링 연산 |
20.5 딥러닝 역사 타임라인
| 연도 | 사건 | 의미 |
|---|---|---|
| 1943 | McCulloch-Pitts 인공 뉴런 | 최초의 인공 뉴런 수학적 모델 |
| 1957 | Rosenblatt의 퍼셉트론 | 최초의 학습 가능한 신경망 |
| 1969 | 민스키 "Perceptrons" 저서 | XOR 문제 지적 → 1차 AI 겨울 |
| 1986 | 역전파 알고리즘 대중화 | 다층 신경망 학습 가능해짐 |
| 1997 | LSTM 발표 | 장기 의존성 문제 해결 |
| 1998 | LeCun의 LeNet-5 | CNN의 원조, 손글씨 인식 |
| 2012 | AlexNet (ImageNet 대회) | 딥러닝 시대 개막, GPU 학습의 위력 입증 |
| 2013 | Word2Vec | 단어 임베딩 혁명, 의미 벡터 공간 |
| 2014 | GAN 발표 | 생성 모델의 새로운 패러다임 |
| 2014 | 어텐션 메커니즘 | 번역 성능 획기적 향상 |
| 2015 | ResNet (152층) | Skip Connection, 초깊은 네트워크 학습 가능 |
| 2015 | Batch Normalization | 학습 안정화, 거의 모든 모델에 적용 |
| 2017 | "Attention Is All You Need" | Transformer 탄생 → 현대 AI의 초석 |
| 2018 | BERT, GPT-1 | 사전 학습 언어 모델 시대 개막 |
| 2020 | GPT-3 (1,750억 매개변수) | 스케일링 법칙, few-shot 학습 입증 |
| 2020 | Vision Transformer (ViT) | Transformer가 비전 분야도 정복 시작 |
| 2021 | AlphaFold2 | 단백질 구조 예측 → 생물학 혁명 |
| 2022 | ChatGPT, Stable Diffusion | AI의 대중화 원년, 생성형 AI 폭발 |
| 2023 | GPT-4, LLaMA, Claude | 멀티모달, 오픈소스 LLM 경쟁 본격화 |
| 2024 | Sora, Gemini, Claude 3, LLaMA 3 | 비디오 생성, 다자간 LLM 경쟁 심화 |
20.6 자주 묻는 질문 (FAQ)
Q. 딥러닝을 배우려면 수학을 먼저 완벽히 해야 하나요?
아닙니다. 코드를 먼저 실행해보면서 직관을 쌓고, 필요할 때 관련 수학을 공부하는 "탑다운" 방식이 훨씬 효과적입니다. fast.ai의 제레미 하워드도 이 방식을 강력히 권장합니다. 물론 논문을 읽거나 새로운 아키텍처를 설계하려면 결국 수학이 필요하지만, 입문 단계에서 수학에 발목 잡힐 필요는 없습니다.
Q. GPU가 없으면 딥러닝을 할 수 없나요?
작은 모델과 데이터셋으로는 CPU에서도 충분히 학습할 수 있습니다. MNIST 같은 교육용 데이터셋은 CPU에서 몇 분이면 학습됩니다. GPU가 필요해지면 Google Colab(무료 GPU), Kaggle Notebooks(무료 GPU), 또는 클라우드 GPU 서비스를 활용할 수 있습니다.
Q. PyTorch와 TensorFlow 중 뭘 배워야 하나요?
2024년 기준 학계와 산업계 모두에서 PyTorch의 사용률이 압도적으로 높습니다. 최신 논문과 오픈소스 프로젝트의 대부분이 PyTorch로 구현되므로, PyTorch로 시작하는 것을 권장합니다. TensorFlow는 모바일 배포(TFLite)나 기존 시스템 유지보수가 필요할 때 학습하면 됩니다.
Q. 딥러닝 엔지니어가 되려면 어떤 경로가 좋을까요?
Python과 기초 수학을 다진 후, PyTorch로 기본 모델(MLP, CNN)을 직접 구현해보세요. 그 다음 Kaggle 대회에 참가하여 실전 경험을 쌓고, 관심 분야(비전, NLP, 생성형 AI 등)를 정해 깊이 파고들면 됩니다. 포트폴리오를 GitHub에 공개하고, 기술 블로그를 운영하면 취업에 큰 도움이 됩니다.
20.7 마치며
축하합니다! 전 20장의 '딥러닝의 모든 것' 튜토리얼을 모두 마치셨습니다.
딥러닝은 단순한 기술을 넘어 인류의 문제 해결 방식 자체를 바꾸고 있습니다. 과거에는 "사람이 규칙을 설계"했다면, 이제는 "데이터로부터 규칙을 발견"합니다. 이 패러다임의 전환은 과학, 의학, 예술, 일상생활 전반에 걸쳐 혁명적 변화를 만들어내고 있습니다.
이 튜토리얼은 딥러닝의 전체 그림을 조감도처럼 보여주는 것이 목표였습니다. 각 챕터의 주제는 그 자체로 수개월을 공부할 만큼 깊은 분야입니다. 이 튜토리얼을 출발점으로 삼아, 관심 있는 분야를 더 깊이 탐구해 보시기 바랍니다.
1. 수학을 두려워하지 마세요 — 딥러닝의 수학은 선형대수(행렬 곱셈)와 미적분(미분, 연쇄 법칙)이 핵심입니다. 고등학교 수준의 수학 위에 조금만 쌓으면 됩니다. 수학을 모르고도 모델을 사용할 수는 있지만, 이해하고 개선하려면 수학이 필요합니다.
2. 직접 구현하세요 — 라이브러리 한 줄이면 되는 것을 밑바닥부터 구현해 보면, "왜 이렇게 작동하는지"가 체감됩니다. 역전파를 NumPy로 직접 구현한 사람과 그렇지 않은 사람의 이해 깊이는 완전히 다릅니다. Andrej Karpathy의 "Neural Networks: Zero to Hero" 시리즈가 이 접근법의 최고 교재입니다.
3. 논문을 읽으세요 — 딥러닝은 매주 새로운 돌파구가 나타나는 분야입니다. 블로그 해설로 시작해도 좋지만, 원본 논문을 읽는 습관을 길러야 최전선에 설 수 있습니다. arXiv, Papers With Code가 좋은 출발점입니다. 처음에는 Abstract와 Introduction만 읽는 것부터 시작하세요.
딥러닝의 세계에 오신 것을 환영합니다. 이 튜토리얼이 여러분의 AI 여정에 든든한 첫걸음이 되기를 바랍니다!